package com.hdj.chapter3;

import java.io.Serializable;

/**
 * @description 单例模式
 * @author  hdj
 * @date  2017/12/12.
 */
public class SingletonDemo2 implements Serializable{

    /**
     * 私有静态实例 延迟加载
     */
    private static SingletonDemo2 instance = null;

    /**
     * 私有构造方法
     */

    private SingletonDemo2(){}

    /**
     * 静态工程方法，创建实例
     */
    public static synchronized SingletonDemo2 getInstance(){
        //注意：synchronized关键字锁住的是这个对象，每次调用getInstance()，都要对对象上锁，在性能上会有所下降，
        //      事实上，只有在第一次创建对象的时候需要加锁，之后就不需要了，所以，这个地方需要改进
        if(instance == null){
            instance = new SingletonDemo2();
        }
        return instance;
    }

    /**
     * 序列化也可以破坏单例模式 如果该对象被用于序列化，可以保证对象在序列化前后保持一致
     */
    public Object readResolve(){
        return instance;
    }

}
